home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
SGI Freeware 2002 November
/
SGI Freeware 2002 November - Disc 3.iso
/
dist
/
fw_sawfish.idb
/
usr
/
freeware
/
info
/
sawfish.info-2.z
/
sawfish.info-2
Wrap
Text File
|
2001-10-09
|
89KB
|
2,525 lines
This is sawfish.info, produced by makeinfo version 4.0 from
sawmill.texi.
START-INFO-DIR-ENTRY
* sawfish: (sawfish). sawfish programming manual
END-INFO-DIR-ENTRY
This is Edition 0.6, last updated 12 December 1999, of `The sawfish
Programming Manual', for sawfish, Version 0.19.
Copyright 1999 John Harper.
Permission is granted to make and distribute verbatim copies of this
manual provided the copyright notice and this permission notice are
preserved on all copies.
Permission is granted to copy and distribute modified versions of
this manual under the conditions for verbatim copying, provided that
the entire resulting derived work is distributed under the terms of a
permission notice identical to this one.
File: sawfish.info, Node: News, Next: Colors, Prev: Introduction, Up: Top
News
****
This lists the user-visible changes made to Sawfish, and which
releases they occurred between. For more detailed information see the
`ChangeLog' files in the Sawfish source tree.
0.99
====
* Requires `librep' 0.14 or newer
* Translation updates: ja (Sato Satoru), no (Kjartan Maraas), es
(Carlos Perell≤ Marφn), fi (Antti Ahvensalmi), cs (Jiri Cerny), fr
(Christian Marillat), de (Matthias Warkus, Christian Meyer), da
(Ole Laursen), sk (Stanislav Visnovsky), tr (╓zgⁿr), sv (Christian
Rose, Peter Winnberg), gl (Jesus Bravo Alvarez)
* Do i18n on more text strings (Vlad Harchev, me)
* Broken support for multiple-screen displays. Supplying the new
`--multihead' option will fork extra copies of sawfish for each
extra screen. This has some fundamental problems, but some people
seem to want it (Michael Vogt, Mahmood Ali, me)
* Window manager virtual modifier once again defaults to `M-'
instead of `C-'
* Added support for `Off2' and `Off3' events
* `menu-program-stays-running' variable now defaults to true by
popular demand
* New command `focus-desktop'
* Switch viewports more efficiently (by choosing the best order to
move windows, to minimize the exposed area)
* Monitor the `_WIN_WORKSPACE' property of each window
* Bug fixes:
- Check for X SHAPE extension, exit if it's not available
- Wait for the focus-in event before changing sawfish's
knowledge of the focused window when moving focus from one
window to another
- Be more ICCCM-compliant, don't send synthetic configure notify
events when the window was resized
- Fixed locale font handling
- Don't leave grid traces when trying to move/resize a window
that's locked in place
- Fixed bug where the pointer being over the message window
could confuse focus after window cycling
- `decorate-transients' option works again with shaded windows
- Documentation appears in tooltips again
- Handle sticky properties better in the `window-history' module
- Maximization fixes for multi-headed displays (Florent
Guillaume)
- Cancelling a resize of a maximized window no longer discards
the window's maximized state
0.38
====
* Translation updates: gl (Jesus Bravo Alvarez), sv (Martin
NorbΣck), de (Matthias Warkus, Christian Meyer), ru (Vlad
Harchev), es (Joseba Garcφa Etxebarria), pl (Daniel Koc), fi
(Antti Ahvensalmi), sk (Stanislav Visnovsky), az (Pablo
Saratxaga), cz (Stanislav Brabec), no (Kjartan Maraas), el (Simos
Xenitellis), it (Michele Campeotto), fr (Christian Marillat), ro
(Marius Andreiana), ko (?)
Extract some more translatable strings (Vlad Harchev)
* `Crux' theme now has an extra button mode: `Default', like Mac OS
Platinum but also has an iconify button. Used by default
* The `grow-pack' module now works with windows which specify
increments (Kai Gro▀johann)
* New command `kill-client'
* Fixed bugs:
- Don't return a null pointer when no default cursor has been
set, return `nil' instead
- Avoid triggering assertions in the stacking list code when
raising or lowering windows and the given sibling has been
destroyed
- Turned off the annoying code that beeps and prints a message
when unfocusable windows are detected
- The GNOME hints now listen for the `_WIN_WORKSPACE' property
changing and will move the window in response
- Don't forget maximized state of windows when they're moved,
only if they're resized
- Don't show special cursors when moving or resizing windows, or
when hovering over the title bar
- Corrected off-by-one error in `smart' placement modes
- Identified and fixed some problems in the new GNOME/KDE window
manager hints implementation (Rob Hodges, me)
0.37
====
* New command line option `--window-history-file=FILE'
* Search for user's rc file in this order: `~/.sawfishrc',
`~/.sawfish/rc', `~/.sawmillrc'
* New option `configure-ignore-stacking-requests' and a
similarly-named window property. When set stacking requests from
windows are ignored (Matt Tucker)
* When restarting sawfish, reselect the previously selected workspace
* Added a function that can recolour multiple image channels
simultaneously
* New function `exit-type' - returns the type of exit in progress
* Translation updates: ja (Sato Satoru), sk (Stanislav Visnovsky),
es (I±aki Garcφa Etxebarria), hu (Robert Vanyi), tr (Fatih Demir),
ro (Tutu Valentin), no (Kjartan Maraas), it (Michele Campeotto), pl
(Daniel Koc)
* Fixed bugs:
- Fixed focus-handling in enter-only mode on window close and
viewport switch
- Fixed overflow error in the image recolouring module (Simon
Budig)
- Session management always uses a unique session file (Timo
Korvola, me)
- Fixed bug in random placement mode where windows could
sometimes be placed off-screen
- Fixed some auto-raise problems by reverting a misguided bug
fix
- Fixed bugs with aborted session saves
- Cache stacking order of windows locally - this allows us to
keep the order consistent, especially after window
reparenting operations
- Don't call `XParseColor' unless we actually _have_ a display
connection (merlin)
- Merged two calls to `setlocale' to avoid trashing the locale
preferences
- Check for presence of Xinerama extension before trying to use
it - removes the annoying error message at startup
- Added some more X server timestamp logic to correct for the
timestamp discontinuities after APM resume
0.36
====
* Added a new default theme: `Crux'. By default it recolours itself
to match the current GTK+ selection colour. (Arlo Rose, me)
* Updated translations: it (Michele Campeotto), fr (Christian
Marillat)
* Added a `shade-button' button class (many themes created it anyway)
* Added a `sawfish.wm.util.recolor-image' module, currently contains
a single function for recolouring parts of images based on a given
colour gradient
* Added new command `delete-group'. Deletes a whole group of
windows. With default bindings, shift-click on the close button to
invoke this command
* Added support for KDE-style mini-icons. If the window has no
normal icon, then `window-icon-image' will return the mini-icon
* Fixed bugs:
- Themes that use the module for reading the user's gtk
preferences will once again get updated when the gtk theme
changes
- Fix another of the null-string translation bugs (Christian
Marillat)
- Work around `XUrgencyHint' not being defined before X11R6
- Fixed some long-standing bugs when decorating windows (use the
correct mask when creating the overall window shape; for
frame parts with no mask, set the local shape to the
appropriate rectangle; be sure to generate at least one
Expose event when reconfiguring frame parts)
- Fixed crashing bug when `bind-keys' is called with zero
arguments
- Fixed typo in `crop-image' function when checking validity of
HEIGHT parameter (martin@whoever.com)
0.35
====
* Translation updates: ja (SATO Satoru), it (Michele Campeotto),
zh_TW.Big5 (Chun-Chung Chen), pl (Daniel Koc), sk (Stanislav
Visnovsky)
* Items in `choice' widgets may now contain descriptive names,
syntax is `(SYMBOL "DESCRIPTION")'
* Changed `focus-windows-when-mapped' option to only apply to
non-transient windows (this option is now enabled by default)
* New placement modes `top-left' and `off-center'. `top-left' is
now the default mode for non-transients
* Enabled the module supporting the newly standardized GNOME/KDE
window manager hints. Also made random changes to support KDE2 a
lot better
* Added WM_PROTOCOLS `_SAWFISH_WM_RAISE_WINDOW' and
`_SAWFISH_WM_LOWER_WINDOW'. Used by `maybe-raise-window' and
`maybe-lower-window' functions.
These are similar to `WM_TAKE_FOCUS', in that if the window
supports the protocol, it's up to it whether or not it raises (or
lowers) the window in question. These functions should only be used
where the user hasn't explicitly requested the restacking
An example usage is an application that doesn't want its window to
be raised due to a button-press event that initiates a drag
operation
* New option `menus-include-shortcuts', disabled by default (Unai
Uribarri)
* Don't interpret windows with `WM_TRANSIENT_FOR' set to the root
window as children of all windows in the group (it causes too many
annoying effects), instead just decorate these windows as
transients
* Handle `group' and `transient' iconification modes better, don't
use a recursive method, instead use one pass to identify the
windows to change, then another to make the changes. In
`transients' mode, only change the state of shared transients if
they will have no visible parents afterwards
* In the (old) GNOME hints code, support a `_WIN_HINTS' client
message (with a similar format to the `_WIN_STATE' message)
* New module `sawfish.wm.commands.viewport-extras', some commands
for viewport for viewport navigation (Dams NadΘ)
* Check for `never-iconify' and `never-maximize' window properties
when appropriate
* Support sixth and seventh mouse buttons (Steve Haslam)
* Bug fixes:
- Fixed problems with reverting changes to list-based options
- Don't allow the empty list as a valid modifier list
- Fixed bug where restarting the wm with
`focus-windows-when-mapped' set would cause any shaded
windows to be deleted
- Ignore iconified windows in the grow-pack code
- Added `font-ascent' and `font-descent' functions to the gaol
- Catch errors when loading site-init and rep-defaults files
- Don't use `""' to denote a null doc string (which has bad
side effects when internationalized)
- Don't need to run `sawfish-client -' to get a repl anymore,
just `sawfish-client'
- Fixed bugs in `composite-images' function
- Fixed ordering of states output by `gtk-style' program
(michaelj@maine.rr.com)
- Fixed grabbing mono window icons in gdk-pixbuf mode
- Reject button event descriptions that don't specify at least
one mouse button
- Accept `()' as a valid image modifier color component
- Now grabs translatable strings from `defgroup' forms correctly
0.34
====
* Added a virtual modifier key, the `W-' modifier. This modifier is
used for all standard window-manager key bindings, it may be set
to any of the standard X modifiers using the configuration tool
* Optionally show window-icons when cycling through windows (Unai
Uribarri Rodrφguez, me)
* Event handlers for low-level X windows now get passed the window
as their second argument (Unai Uribarri Rodrφguez)
* Translation updates: fr (Christian Marillat), sv (Richard Hult),
pt_BR (Flßvio Bruno Leitner), it (Michele Campeotto)
* Error handler module (`sawfish.wm.ext.error-handler'). When loaded
it records the most recent errors, and the time at which they
occurred. Use the `display-errors' command to display all recorded
errors.
* Added an option to not save window-history data for transient
windows. Also added a `window-history-clear' command to forget
history for all windows.
* Rearranged window operations menu to hopefully be clearer
* Attempt to catch and handle errors while loading custom options
* Labels in menu items can now be functions, they should return the
label text when called (with any menu arguments)
* Moved installed message catalogues to $datadir/locale
* `defcustom' forms may now a `:widget-flags' keyword, a constant
list of symbols passed to the configuration tool. Current flags
include: `expand-vertically' and `expand-horizontally'
* Added a `sawfish.wm.util.ping' module, it implements the
`_NET_WM_PING' protocol of the new window manager spec.
* `destroy-notify-hook' is no longer called asynchronously
* Bug fixes:
- Fixed various bugs when dragging/resizing windows
- Reverted the changes to make the click-to-focus click-through
setting apply to window decorations
- Fixed bug when handling 32-bit data in client messages and X
properties
- Fixed window-focus problems when switching viewports
- Many bug-fixes to handling of maximized window state.
Maximized state should now be preserved across wm and session
restarts. It's also saved in the window-history attributes
- Support the function hints of the MWM window manager
properties
- Updated the `sawfish.wm.state.wm-spec' module to match the
current (almost final) draft of the new GNOME/KDE window
manager spec
- Fixed sporadic stacking bugs when unmapped windows exist
- Fixed miscellaneous click-to-focus and focus-click-through
related bugs
0.33
====
* Added support for user-levels associated with individual commands
* The GNOME hints code now understands that the do-not-cover flag is
the same as sawfish's `avoid' property
* Swap properties of sticky windows when entering and leaving
workspaces as for normal windows (fixes the old problem where
sticky windows can grab focus when a workspace is entered)
* Changed the default settings of some customization options,
hopefully to give a more "conventional" feel for new users
* Better support for Xinerama (Geoff Reedy)
* Added a new set of window stacking commands: `raise-window',
`lower-window', `raise-lower-window'. The set of windows affected
by these commands is determined by the `user-raise-type' (either
the individual window, the window and any transients, or the
entire group). The old commands of these names are now called
`FOO-single-window'.
Most modules now use these commands when raising or lowering
windows, allowing the stacking model to be configured globally.
* Translation updates: no (Kjartan Maraas), fi (Antti Ahvensalmi),
it (Christopher R. Gabriel), pt_BR (Douglas Moura Ferreira), uk
(Yuri Syrota), de (Matthias Warkus)
* Fixed bugs:
- If committing changes in the configurator causes new
customization options or groups to be added, update the UI to
reflect this
- Added code to detect and correct the sporadic bug where
windows become unfocusable in click-to-focus mode
- Sanitized how the focus gets passed to and from transient
windows (when passing focus back from a transient, give it to
the most recently focused window in the group, not the
transient's parent)
Also, try to avoid displaying maximize buttons in windows
whose hints prevent them from being maximized
- Many fixes to how maximized windows are handled across session
and window manager restarts. Also support GNOME window
maximized hints when windows are created
- Fixed some bugs in the `wm-spec' module
- Don't trigger auto-raise hooks on leave/enter events
generated by pointer grabs
- The `edge-flip-delay' option now applies when dragging windows
- Fixed the preview command in `sawfish-themer'
- Miscellaneous fixes to the "smart" window placement modes
- Fixed type description of `persisitent-group-ids' option
- In `enter-exit' focus mode, focus isn't removed due to
enter/leave events due to pointer grabs (fixes the bug with
Mozilla URL completion)
- Fixed (again) the `focus-click-through' behaviour with
respect to frame decorations
- Re-added hack to make GMC icons unfocusable
- Fixed interactive placement to check for window destruction
(merlin)
- Fixed bug with tiled images with shapes (the shape mask would
always be applied an integer number of times, ignoring the
size of the frame part it's associated with)
- Fixed `window-wants-input-p' to check if the `InputHint' is
set before reading the value
0.32
====
* `M-TAB' window cycling now works in both directions, bind keys to
`CYCLE-COMMAND-backwards', e.g. `cycle-windows-backwards'
(Merlin, me)
* Added support for X `Urgency' hint: `window-urgent-p' and
`window-state-change-hook' is called with `urgency' state when it
changes
* Some improvements to `shade-hover' mode (adapted from Eli Barzilay)
* Functions that raise/lower groups of windows now generate the
minimum number of expose events (Rob Hodges, me)
* New window property `window-list-skip'. Unified with GNOME
skip-winlist hint
* Custom options may have tooltips, use `:tooltip' tag
* Catch errors when applying custom changes and revert to previous
state
* Translation updates: uk (Yuri Syrota), pt_BR (Douglas Moura
Ferreira), hu (R≤bert Vßnyi), de (Christian Meyer), ja (SATO
Satoru), da (Keld J°rn Simonsen), es (I±aki Garcφa Etxebarria), fr
(Christian Marillat)
* Fixed bugs:
- With click-to-focus in non-click-through mode, don't
click-through into window decorations
- `dimensions' property in window matching was called `size' by
mistake
- Export the various `sp-cost:' functions from the
`sawfish.wm.placement.smart' module
- Don't allow cycles in the transient-for relationship
- Fixed some maximize bugs
- GNOME skip-focus property no longer causes the window to be
unfocusable, just uncyclable-to
- Coerce auto-raise timeout to be at least one millisecond;
support `disable-auto-raise' correctly
- Window input hints defaults to true not false
- Fixed typo when loading the defaults file (Ronald Wahl)
- Fixed command spec of `move-window-FOO' commands (Yoshiki
Hayashi)
- When sending `WM_TAKE_FOCUS' message, only focus the window
if its `Input' hint is set
0.31.1
======
* Translation updates: da (Kenneth Christiansen), de (Christian
Meyer), no (Kjartan Maraas), pt_BR (Rui Miguel Silva Seabra), sv
(Johan Dahlin), uk (Yuri Syrota)
* Bug fixes:
- Fixed typos in `sawfish.wm.gnome.integration' and
`sawfish-themer' (Christian Marillat)
- Fixed bug when building on Tru64 (John H. Palmieri)
- Remember to check return value when initializing Imlib
0.31
====
* Requires librep version `0.13'
* Organized all lisp code into a hierarchy of modules. Root points
are `sawfish.wm' for window manager code, `sawfish.ui' for
configurator and `sawfish.gtk' for GTK+ utilities
Compatibility should have been preserved as far as possible,
through the use of module aliases. The `user' module that
unmodularized user code is loaded in should look very similar to
the old environment. However, code using private functions,
probably will not work
New features written as modules can either import modules
individually, or just open `sawfish.wm' to get the core
functionality
* All command handling is now written in Lisp. It's fully compatible
except for how commands are defined. Since there is no longer a
unified namespace the mapping from names to command definitions is
maintained separately.
`define-command' and `autoload-command' add entries to this
mapping. `define-command' takes a name and a function (and some
other optional arguments). The old style of defining commands still
works, but only in the user module
* `sawfish-client' now provides the same repl as the normal `rep'
program. E.g. this allows the module system to be easily inspected
Also, the module of each loaded theme is available for inspection
under `themes.THEME-NAME'. (With themes using top-level defines
instead of a single `let*' block, this is useful for debugging)
* `sawfish.client' module provides lisp functions for communicating
with a running window manager. Also, the protocol has been
modified to support proper communication of errors, which are then
re-raised on the client-side. This should make debugging
client-server code more obvious
* `Action' parts of menu items may now be lisp objects that don't
have a read syntax. (E.g. this allows closures to be used,
avoiding the problems arising from modularization)
* Support for checked and radio-group menu items. Also a new
function `add-window-menu-toggle' to add items to the `Toggle'
sub-menu of each window
* Handle `ConfigureRequest' events in a way that is compliant with
the ICCCM--honour the window's `win_gravity' setting (defaulting
to `NorthWest' gravity), instead of assuming `Static' gravity
* Support more GC attributes in the `sawfish.wm.util.x' plugin (Ryan
Pavlik)
* Support for handling arbitrary windows as extra "root" windows.
Used, e.g., to support Nautilus' desktop window. Allows the focus
modes to work correctly
To support this, new window property `desktop' denoting a
"desktop" window; new function `desktop-window-p' recognizing one
of these things (or the symbol `root')
* Added `pointer-motion-threshold' option. Pointer motion events are
only generated when the pointer moves at this many pixes away from
the position it had when the button was pressed
* New functions: `scale-image', `composite-images', and `crop-image'.
* New option `maximize-avoid-avoided' (Jonas Linde)
* New functions exported by `sawfish.wm.ext.tooltips' module:
`display-tooltip', `remove-tooltip'
* New function exported from `sawfish.wm.viewports' module:
`select-workspace-and-viewport'. Renamed some workspace functions:
`ws-move-window' => `move-window-to-workspace', `ws-copy-window'
=> `copy-window-to-workspace', `ws-insert-workspace' =>
`insert-workspace', `ws-move-workspace' => `move-workspace',
`ws-remove-window' => `remove-workspace'.
* Changed interface of `get-visible-window-edges' function to use
proper keyword parameters, and added some new keywords
* New commands `help:about' and `gnome-about'. Added a
`sawfish-about' script to implement the first of these. Added
associate menu items to the `Help' menu
* New window property `cycle-skip', defines whether the window is
included when cycling the focused window. (Dave Dribin, me)
* Translation additions and updates: es (I±aki Garcφa Etxebarria),
tr (Fatih Demir), zh_CN.GB2312 (zw@zhaoway.com), fr (Christian
Marillat), ja (SATO Satoru), de (Kai Lahmann), el (Simos
Xenitellis), ga (Seßn ╙ Ceallaigh), ru (Valek Filippov), sl
(Andraz Tori)
* Bug fixes:
- Don't let errors in `.sawfishrc' prevent customization
settings being loaded
- initialize event handler when creating X window proxies (Matt
Tucker)
- No longer able to `throw' out the top of the program by
mistake
- Fixed `find-head' function, to allow Xinerama support to work
- When exiting, leave window configurations exactly as they were
found (E. Jay Berkenbilt)
- Fixed `synthesize-event' to scan the window tree for a child
window accepting button events (E. Jay Berkenbilt)
- Removed "yow! ..." debugging messages
- `image-set' and related functions will add an alpha channel
to the image when necessary (when using gdk-pixbuf)
- Canonify `S-x' as `X' where possible
- Catch and handle errors when matching properties in the
`sawfish.wm.ext.match-window'
- Escape underscores in menu items where they shouldn't
introduce accelerators. (Added `quote-menu-item' function to
help with this)
- Fixed race-condition when exiting configurator embedded into
the GNOME control center (Havoc Pennington, me)
- Fixed bug in `set' method of the `icon' widget
- Fixed shading behaviour of included themes (Daniel Lundell)
- Compute the shape of the frame window each time the
background of one of its parts changes
0.30.3
======
* If a frame part has a non-nil `hidden' attribute, ignore it
* When reframing windows, keep the absolute position of the client
window constant
* Support `FIXED_POSITION' GNOME hint (renamed old `fixed-position'
property as `client-set-position'; `fixed-position' now means
don't allow the window to be moved by the user)
* `transients-above' option can now be set per-window
* Translation updates: fr (Christian Marillat), en_GB (Robert
Brady), de (Kai Lahmann), da (Keld Simonsen), ru (Valek Filippov),
sl (Andraz Tori), no (Kjartan Maraas), gl (Jesus Bravo Alvarez), it
(Michele Campeotto)
* Fixed bugs when converting option values
* Fixed `:require' keyword in `defcustom' always causing the module
to be loaded, not just when the option is non-nil
* Fixed bug when adding windows that are shaded
* Fixed some minor bugs in the configurator
0.30.2
======
* Window cycling now forwards terminating events to external
applications as well as internal bindings (e.g. `M-TAB M-w' closes
an activated Netscape window)
* `quote-event' command now works with applications that ignore
synthetic events (adapted from code by Timo Korvola)
* Reorganized frame style and window type management. New function
`define-frame-type-mapper' allows modules to affect the mapping
from window type to frame type. E.g. the shading module uses this.
(fixes the bug that changing the frame type of a shaded window
didn't work)
* Added function `variable-customized-p'; use this to avoid
redefining user-modified options
* Do type-directed deep conversion of values when converting to/from
readable representations. This fixes the bug that options with
`:type (optional color)' weren't being converted when passed
between the wm and the configurator, leading to reader errors
A side-effect of this is that updated custom files will not be
compatible with previous versions of the wm (though old custom
files will work with new versions)
* Translation updates: no (Kjartan Maraas), de (Kai Lahmann), nl
(Dennis Smit), sl (Andraz Tori)
* Added primitives `map-windows' and `filter-windows'
* Fixed bug of not retaining focus on startup when originally in
PointerRoot mode and moving to click-to-focus mode (Brad Thompson)
* Ensure that apps get sent a synthetic ConfigureNotify event after
ConfigureRequest events are handled (fixes bug where menus in Java
apps can appear at wrong position until window is moved)
* When referencing known variables from subroutines, make sure that
restricted environment doesn't prevent the variable being accessed
(fixes bug where `default-bevel-percent' was being ignored)
* When creating transient groups, don't compare null group ids
(fixes xfmail related bugs)
* Fixed `move-window-to-viewport' command to correct for 1...
indexing
* Fixed non-gnome workspace widget in configurator
0.30
====
* New commands `activate-viewport-column', `activate-viewport-row'
* New commands `raise-window-and-transients',
`lower-window-and-transients' and
`raise-lower-window-and-transients',
`raise-transients-and-pass-through-click'.
As the normal window stacking commands, but restacks the
"transient-group" of the window. This includes the window itself
and any transients it has, and any windows that it itself is a
transient of.
These commands are used in the default keymaps
* Functions that deal with transient windows now understand the de
facto standard of setting the `WM_TRANSIENT_FOR' property to the
root window denotes that the window is a transient for the whole
group
* New image manipulation functions: `image-ref', `image-set',
`image-fill', `image-map'. New color accessor function
`color-rgb-8'. New function `root-window-id'
* Improvements to `sawfish-ui': optionally use some GNOME widgets,
more lisp widget types, some bug fixes
* New command `command-sequence'. Allows individual bindings to
invoke a sequence of commands
* Options `iconify-group-mode' and `uniconify-group-mode' replace
`iconify-whole-group' and `uniconify-whole-group'. New commands
`iconify-transient-group', and `uniconify-transient-group'
* Added `:type*' key to `defcustom', like `:type', but value is left
unquoted
* Translation updates: pl (Daniel Koc), ru (Valek Filippov), uk
(Yuri Syrota), es (I±aki Garcφa Etxebarria)
* Fixed handling of `WM_NORMAL_HINTS' (was using base-size instead
of min-size in places)
* Fixed further locale / FontSet bug (Tomohiro KUBOTA)
* `window-history' module won't resize a window to a size that
violates its size constraints
0.29
====
* Rewrote the configuration user interface. Improvements include:
- Key bindings may now include parameters. E.g. this finally
allows shell commands to be bound to keys using the GUI (use
the new `run-shell-command' command)
- Nautilus-like user-levels to tailor the options shown to the
expertise of the user
- Options may have much richer type descriptions (including
`match-window' options). Also, extra widget types and
containers may be added as extra Lisp modules
- By default the stand-alone configurator commits changes to the
window manager as they are made, instead of waiting for the
`Try' button to be pressed
- Added dependences--options with dependences are only editable
when the value of their dependence is non-`nil'
* Rewrote window stacking code to be based on "stacking
predicates"--functions that accept or reject a possible stacking
configuration. This allows the "stack-transients-above-parents"
option to work correctly, only keeping transient windows above
their _own_ parent windows
* The configure-event handler now understands and handles the full
complexity of stacking requests (Brad Thompson)
* New frame-part attribute: `scale-foreground'. The `cursor'
attribute may now be a function
* Made the `centered', `centered-on-parent' and `under-pointer'
placement modes clamp the window into the current work area (i.e.
without overlapping windows that shouldn't be covered). Added a
`stagger' placement mode
* When grabbing window icons to images, preserve their shape masks
* Moved `window-history' options to `placement' group. Fixed some
more bugs and sub-optimal default option values
* Don't set cursors for button classes, use the default value
* GNOME `SKIP_FOCUS' window hint sets `never-focus' property on
window, as well as the `ignored' property
* Translation updates: de (Karl Eichwalder), ru (Valek Filippov), da
(Kenneth Christiansen)
* Added mostly-complete support for using gdk-pixbuf instead of
Imlib (requires an experimental Xlib version of the gdk-pixbuf
library)
* Various bug fixes and other minor changes...
0.28.1
======
* New options `--visual=TYPE' and `--depth=DEPTH'. These tell the
window manager to use a different visual than the default
* Made the `window-history' module behave more sanely (don't save
iconified or shaded state; include window name when generating
keys for transient windows)
* Made `beos-window-module' the standard window menu (require
`old-window-menu' to get the original version). Also made this
display the windows' class names
* Updated translations: es (I±aki Garcφa Etxebarria), tr (Fatih
Demir)
0.28
====
* New module `window-history'--automatically saves window attributes
when they are explicitly set by the user, then copies these
attributes to windows with the same `WM_CLASS' as they are
created. This is loaded automatically if you have no `.sawfishrc'
* New method of allowing themes to implement only some of the
(currently) four frame types. The variable
`frame-type-fallback-alist' maps each frame type to the type to
try if the original type isn't available in the chosen frame style.
Note that for this to work, themes must return `nil' when they
don't support the requested frame type, until now, the convention
had been to return the default frame definition, so most if not
all themes will need changing. (This doesn't include themes
created using the `make-theme' module.)
* Made the metrics used by the `best-fit' placement mode
user-controllable. Set the `sp-cost-components' variable to a list
of cost functions and the weight to apply to that metric. E.g. by
default it gives 50% importance to the distance from the placement
to the focused window, and 25% each to the distance to the pointer
and to the "future-unusefulness" of the area being covered
* New module `beos-window-menu' to redefine the window menu to group
items by the window group that they are a member of (in the
absence of actual group information, it will heuristically build
groups by matching window titles)
* New option `edge-flip-warp-pointer', whether or not to warp the
pointer after edge-flipping (Paul Warren)
* New option `display-window:uniconify-to-current-workspace',
controls whether windows uniconified by `display-window' should be
moved to the current workspace (John N S Gill)
* Changed method of selecting when to use multi-byte aware rendering
functions (except when initializing the locale fails, or returns a
7-bit locale); also, when creating a fontset fails, try to
intelligently fall back to a similar group of fonts (Tomohiro
Kubota)
* The `x' library now supports creating and then drawing to pixmaps.
The pixmaps can then be grabbed to images using the
`make-image-from-x-drawable' function
* Added a `Help' item to the root menu
* Translation updates: fi (Antti Ahvensalmi), gl (Jesus Bravo
Alvarez), de (Karl Eichwalder), nl (Jan Nieuwenhuizen), pl (Daniel
Koc), tr (Fatih Demir)
* Now supports the `Super' modifier
* Fixed bug of sometimes ignoring pending X events
* Fixed bug of calling focus change hooks too many times (only when
our view of the focused window has actually changed)
* Avoid problems when windows set weird size hints structures
* Raise windows _after_ possibly moving them to a different layer,
when they have been mapped
* When the `cycle-windows' sequence is terminated by an unknown
event, re-handle that event after exiting (so that e.g. `M-TAB'
can be followed by another `M-' qualified event without releasing
Meta)
0.27.2
======
* Translation updates: da (Kenneth Christiansen), de (Karl
Eichwalder), es (I±aki Garcφa Etxebarria), ja (SATO Satoru)
* Attempt to destructure the language code when parsing GNOME
desktop items (e.g. if `LANG=de_DE' look for both `de_DE' and `de'
translations)
* New focus handler events `enter-root' and `leave-root'
* Removed `raise-groups-on-focus' option, it caused unstable window
flickering in certain cases
* Fixed bug When transferring focus after a window is unmapped
(inverted choice of when to look under pointer, and when to look in
focus history)
0.27
====
* Changed the name from `sawmill' to `sawfish'; all user-visible
binaries have been renamed appropriately, the old programs will
still work for now...
* Added support for accelerators in menu definitions (this requires
a new rep-gtk package) (Richard Kilgore). Added accelerators to
many of the standard menu items
* Added some (untested) support for Xinerama: `current-head',
`current-head-dimensions', `current-head-offset'. Some placement
modes should handle multiple heads sensibly, as should window
maximization and edge snapping.
* Added icons for GNOME control center applets (all icons by Tigert,
except for the saw-blade logo by Glyph Lefkowitz)
* New functions `map-window-properties' (me), `window-icon-image'
(Bruce Miller)
* Changed behaviour of `raise-group' and `lower-group' to preserve
the stacking of the group, then change the selected window. Added
new command `raise-lower-group'
* New option `raise-groups-on-focus'
* Updated translations: de (Hubert Nachbaur), es (I±aki Garcφa
Etxebarria), gl (Jesus Bravo Alvarez), ko (Man-Yong Lee), tr
(Fatih Demir)
* Try to handle errors more gracefully when creating window frames
* Better handling of errors in the control center applet
* Fixed the `below-client' frame-part attribute
* Fixed the disappearing items in the match-windows dialog
* Fixed the non-beautified entries in the keymaps dialog
* Fixed interactive placement mode (Timo Korvola)
* Invoke audio playing program asynchronously, may avoid deadlocks
* Fixed `workspace-menu' to add the focus-marking asterisk (John N S
Gill)
* Fixed menu-obscuring bug after auto-raising windows
* Ensure that `WM_STATE' property is set each time a window is
mapped, not just the first time
* Fixed bug when discarding grab in click-to-focus mode, even though
successive events may be in the window's keymap
* Only focus windows when they're mapped when they're visible
* Fixed click-to-focus problems when unmapping transient windows
0.26
====
* Added plugin `selection', adds functions `x-selection-active-p'
and `x-get-selection' for retrieving X selections (Mark Probst)
* New functions `prompt-for-window', `prompt-for-workspace' and
`select-workspace-interactively' (Dave Pearson)
* `window-anim' module enabling asynchronous animations after window
events. Currently only two animation styles `wireframe' and
`solid', and they only animate window iconification
* `audio-events' module; maps window manager events to audio samples
(played using esd by default, but can be configured to use any
program)
* When running programs in terminals from the GNOME apps menu, use
the value of `xterm-program' to decide which terminal program to
use (James Antill)
* Translation updates: gl (Jesus Bravo Alvarez), pl (Daniel Koc)
* New command `toggle-window-iconified' (Jens-Ulrik Petersen)
* New option `raise-windows-when-unshaded'
* Customization options for tooltip colors (Erik Assum)
* Removed default binding to `A-x'
* Added support for librep-with-module-system (cvs version)
* Note that `ko' and `zh' languages need FontSets
* When sticking a window not on the current viewport, move it to the
current viewport (Merlin)
* Fixed bug (?) of placing over avoided windows in `random' mode;
also increased `sp-avoided-windows-weight' by an order of
magnitude (Dan Winship)
* Fixed bug of maximizing a window changing its viewport
* Fixed window cycling losing grab if originally focused window is
unmapped
* Fixed `get-cursor' to use the correct background color when
creating cursors from vectors (Alexander Barinov)
* Fixed `get-font' to set `descent' property correctly
* Changed double-buffering semantics in `x' plugin, also only
support this if configure finds the correct header files
* Fixed `synthesize-event' to generate correct relative pointer
positions
* Don't focus on non-visible windows (crashes GNOME control center)
* Fixed bug of using `cp' to install GNOME desktop files
0.25.2
======
* If no user customization file when saving options, inherit from
the custom-defaults file
* Rewrote window stacking (fixes bugs, more efficient)
* Added `input-focus' to theme-callable functions
* When focused window is unmapped, don't try to focus non-visible
windows
* Fixed `display-window' when it's applied to iconified windows
* New variables `fonts-are-fontsets' and `fontset-languages-re' to
work around broken X servers
* Update edges for snapping to when dragging windows across
workspaces or viewports
* When passing keymaps to customization system, filter out, then
later restore, bindings that aren't symbols
* Most commands to move/copy windows between workspaces can now be
told whether to select the destination workspace or not
* In GNOME hints, never place windows on workspaces that don't exist
(from the pager's POV). (Rob Hodges)
* Fixed `ws-move-window' to not remove the window if source and dest
are the same (Rob Hodges)
* Fixed `sp-prune-points' function (Dan Winship)
* Fixed `move-viewport-to-window' to only flip viewports if window
isn't already on the current viewport (Merlin)
* Try to detect and handle system clock being rewound
* Optional second arg to `x-raise-window'; added symmetrical
function `x-lower-window'
* Fixed unix-domain server code assuming atomic writes to sockets
* Added double buffering support to `x' module
* Fixed grabs during multi-key sequences; also, print the current
prefix keys if idle during a multi-key sequence
0.25.1
======
* Only force windows onto the visible screen if they didn't
explicitly set their position
* Redefine `/' in themes to be the `quotient' function (integer
division), which is what they expect. The `divide' function can be
used for real division
0.25
====
* New plugin `x', a basic Xlib binding for creating and drawing in
windows (Merlin, me)
* Added a method of reading textual input from the user from
completion. Provision for completing functions, variables,
commands, files, directories, etc.... Also supports reading
passwords. (Topi Paavola, me)
* Re-enabled the following interactive codes: `a' (function), `C'
(command), `D' (directory), `f' (existing file), `F' (file), `k'
(event), `n' (number), `N' (prefix or number), `s' (string), `S'
(symbol), `v' (variable)
* Support prefix keys in bindings (binding an event to a keymap, or
the name of a keymap, marks that event as a prefix key for the
associated keymap)
* New command `call-command-with-output-to-screen', prompts for and
invokes a command, then displays any output it emitted (bound to
`A-x' in default keymaps)
* New variable `multi-click-delay', maximum time in milliseconds
between button presses to count as `click2' or `click3' events
(Martin Blais)
* New option `edge-flip-only-when-moving' (Yaron M. Minsky)
* New window cycling commands `cycle-prefix', `cycle-class' (Kai
Gro▀johann); can now be bound to events with more than one
modifier (Timo Korvola)
* New command `uniquify-window-name'; new property `unique-name'.
Forces the window to have a unique name
* New commands `size-window-add-column',
`size-window-subtract-column', `size-window-add-row',
`size-window-subtract-row'
* Window edge snapping now has three variants: `magnetism' (the old
method), `attraction' and `resistance'. (Merlin, me)
* New commands `grow-window-{left,right,up,down}' and
`pack-window-{left,right,up,down}' (Kai Gro▀johann)
* Support the `WM_COLORMAP_WINDOWS' protocol
* New functions `synthesize-event', `font-ascent', `font-descent',
`call-with-keyboard-grabbed'
* New functions `define-placement-mode' and
`define-focus-mode'--make defining these things easier. Focus
modes are now settable for each window individually
* Made the tree-organised customization groups work better with the
GNOME control center. Add the sawmill capplet desktop entries to
the GNOME programs menu (under Settings). Also, beautify the names
displayed in the bindings widget
* When applicable, load the GNOME applications menu when the wm is
first idle, reduces the latency of displaying the first root menu
* Translation updates: de (Hubert Nachbaur), es (I±aki Garcφa
Etxebarria), ja (Sato Satoru), sv (Andreas Persenius)
* Fix bug of not noticing when the keyboard / pointer / modifier
mappings change
* Fixed `current-event-string' function
* Better method of reconfiguring frames when they're resized (helps
opaque resizing)
* Added some kludges to try and break the intermittent lockups some
people have seen
* Made the auto-gravity option work a lot better (John N S Gill, me)
* Fixed bug where unmapped windows were being included in the
snapping calculation
* Fixed bug when uniconifying windows and merging workspaces
* Fixed bug of warp-cursor-to-window trying to put the pointer
outside the screen boundaries (Merlin)
* Fixed bug of losing keyboard grab when originally focused window
is deleted during `x-cycle' command
* Fixed bug of trying to focus unviewable parent windows when
focused window is unmapped
0.24
====
* Configure requests events are now passed to the hook
`configure-request-hook'. The new configure handler respects
window gravity when resizing
* New option `configure-auto-gravity'. When enabled the window
gravity is implied by the position of the center of the window.
(e.g. try placing the GNOME control center in the bottom right
corner of the screen, then click on an item that causes it to
resize)
* Worked around the numerous reports of non-existent font errors
that using `XCreateFontSet' causes--fall back to `XLoadQueryFont'
if possible
* There's now a library `custom-defaults' giving default
customization options (only if the user has no `~/.sawmill/custom')
Also, remove the need to call `custom-add-required' in
`.sawmillrc', it's always done now
* New window properties `focus-when-mapped', and `gravity'
(overrides the hinted gravity value)
* New placement modes `under-pointer' and `centered-on-parent'
* New option `resize-edge-mode', replaces `resize-by-frame-class'
and `resize-add-edges'>. Also allows twm-style resizing (Mark
Probst, me)
* Optionally display command documentation in tooltips; tooltips are
now aligned into columns (if you use a monospaced font for them)
* Variables `default-cursor', `synthetic-configure-mutex',
`frame-draw-mutex', `frame-state-mutex' are now functions
* New functions `x-keysym-name', `x-lookup-keysym', `decode-event',
`encode-event'.
* New option `move-resize-inhibit-configure'
* Translation updates: es (I±aki Garcφa Etxebarria), fr (Christian
Gillot), gl (Jesus Bravo Alvarez), nl (Han-Wen Nienhuys), pt_PT
(Rui Silva), sv (Andreas Persenius)
* Fixed single-quoting in client readline (Matt Krai), copied
bouncing parentheses hack
* Removed `fp->win == 0' assertion, it should be harmless and was
triggering for some people
* Fixed bug of sending configure notify events to too many windows
* Fixed off-by-one error in `ws-insert-workspace' (Kirk Saranathan)
* Fixed maximization in single directions to work additively
* Fixed bug of leaving tooltips displayed after the associated
window has been deleted
* Fixed bug of not removing `-clientId' option from restart
parameters
* Fixed bug of not translating customize group names
0.23
====
* Customization groups are now organized as a tree structure, with
groups able to contain subgroups
* Define the list of features that will be presented to the user in
`sawmill-defaults.jl', by calling `custom-add-required'. If you
have a `.sawmillrc' you'll need to do this manually
* New function `move-resize-window-to' doing a combined move/resize.
New variable `synthetic-configure-mutex', when set holds off
sending synthetic `ConfigureNotify' events to windows until it's
unset (this is held while interactively moving or resizing windows)
* New hook `after-add-window-hook'. Called with a single parameter,
the window that's has just been adopted
* New functions `x-kill-client', `delete-window-safely'.
`send-client-message' now groks long integers (i.e. cons cells) in
32-bit data (Timo Korvola)
* `window-put', `window-get', `image-put', `image-get', `font-put',
`font-get': use `equal' to compare keys, not `eq'
* New module `error-handler', implements a simple alternative error
handler (and allows the much-maligned beep to be turned off),
requires rep 0.11+
* Allow the pointer-warp position to be defined relative to the
window (Kai Gro▀johann)
* New module `shade-hover', unshades windows while the pointer is
over them
* Don't automatically warp to the new workspace when opening windows
on a different workspace
* Include iconified sticky windows in the `window-menu', shorten
sticky entries as usual (James Antill)
* Support the `TryExec' field in GNOME desktop files (Ian)
* New commands: `raise-or-pass-through-click',
`raise-and-pass-through-click-if-focused'
* New module `move-cursor', various commands for moving the mouse
pointer; these commands are bound to the cursor keys when moving
or resizing windows
* Translation updates: es (I±aki Garcφa Etxebarria), fr (Fabien
Ninoles), gl (Jesus Bravo Alvarez), ja (Satoru Sato), nl (Jan
Nieuwenhuizen), tr (FΓtih Demir)
* Fix bug of leaving window-name unset when `WM_NAME' is a null text
property
* Don't fail catastrophically if unable to open the default font
* Fixed method of truncating maximized window dimensions
* Fixed the match-window `skip-winlist' and `skip-tasklist'
properties I'd stupidly broken
* Fixed bug of trying to edge-flip sticky windows
* Fixed the `move-workspace-forwards' and `move-workspace-backwards'
commands
* Fixed `uniconify-to-current-viewport' option
* Fixed infinite-loop bug in `delete-empty-workspaces' command
* Avoid generating empty sub-menus when reading GNOME menu tree
0.22
====
* Window frame parts are now first-class lisp data objects, allowing
a higher level of control by themes
New or updated functions to access frame parts directly:
`frame-part-get', `frame-part-put', `frame-part-window',
`frame-part-x-window', `frame-part-position',
`frame-part-dimensions', `frame-part-state', `map-frame-parts',
`refresh-frame-part', `rebuild-frame-part'
Other new functions: `refresh-window'
* Updated `sawmill-themer' to emit code to tell the window manager
that the theme is editable. The wm adds an `Edit Theme...' option
to the Customize menu when appropriate
* The `call-after-property-changed' function can now be given a list
of properties to monitor (James Antill)
* New function `call-after-state-changed', monitors a list of window
states (i.e. things like iconified, shaded, ...) and calls a
function when any of them change. The `window-state-change-hook'
now has a second argument (apart from the window), the list of
symbolic states that changed (James Antill)
* Add support for `skip-winlist' and `skip-tasklist' to the window
matcher when GNOME support is enabled (Ben Liblit)
* Integrated patch supporting multi-byte languages from the Kondara
MNU/Linux distribution (forwarded by Yukihiro Nakai)
* Translation updates: de (Christoph Rauch), es (I±aki Garcφa
Etxebarria), gl (Jesus Bravo Alvarez), ja (Satoru Sato), tr (FΓtih
Demir)
* Use a combo box in the configurator to display the list of themes
(it gets given scroll bars when too big for the screen)
* Changed timestamp handling--attempt to detect and discard
timestamps that arrive out of order
* Added option controlling title justification to `mono' theme
* Filter <Scroll_Lock> modifiers as well as the other lock modifiers
(Matt Krai)
* Fixed `display-message' function update background color, and
gracefully handle invalid color specifiers (Matt Krai)
* Reverted to grabbing events on the client window, not the frame,
avoids some awkward-to-fix-correctly problems
* Load i18n support _before_ other libraries; ensures that some
static strings get translated
* Fixed annoying flicker when cycling to an iconified window
0.21.1
======
* Fixed problem causing spurious double-click events to be reported
in click-to-focus mode
* Fixed problem with binding `-Off' events in the `window-keymap'.
(Matt Krai)
* Don't try to grab non-existent keys (which actually grabs the
entire keyboard)
* Fixed some problems with reading unusually formatted GNOME menu
entries
0.21
====
* Frame pattern definitions (foreground, background, font) may now
take alists as well as the old single object, or list of four
objects. Possible states are `inactive', `focused',
`highlighted', `clicked', `inactive-highlighted',
`inactive-clicked'. (Last two are new)
* New program `sawmill-themer'. A GUI for creating simple themes
(those without any parts defined by functions)
* New module `gnome-int', loaded by `sawmill-defaults' if GNOME is
around, sets up some GNOME'ish things
* New command `toggle-single-window-mode'
* Translation updates/additions: de (Christoph Rauch), es (I±aki
Garcφa Etxebarria), nl (Han-Wen Nienhuys)
* Optional removal of tooltips after time period (Morgan Schweers)
* `Any-RET' completes interactive move or resize
* Work around Imlib's annoying image caching, `make-image' now
_always_ returns a new image
* Fixed gc bug when building window frames
* Fixed X property handling on Alpha's (George Lebl)
* Make `call-command' accept closures
* Make `(cursor . nil)' work correctly in frame definitions
* Grab on frame window, not client window (ICCCM compliant)
* Fixed the "uniconify to current workspace" option
* Added window-maximization predicates to the gaol
0.20
====
* Rewrote workspace handling--windows can now appear on multiple
workspaces, with each instance having different properties
(position, size, whatever...)
Create new window instances by using the `copy-to-next-workspace',
`copy-to-previous-workspace', and `copy-to-workspace:N' commands.
Merge instances by moving them to the same workspace, or using the
`delete-window-instance' command
* Added linear-viewport commands--indexing two-dimensional virtual
workspace areas by one-dimensional values (adapted from code by
Eric Kidd)
* Rewrote tooltips; especially how they're removed (also, don't show
null keymaps)
* Added new match-window property `ungrouped'. Means to put the
window in a group on its own
* Translation additions/updates: da (Wandy Christiansen), en_GB
(me), es (I±aki Garcφa Etxebarria), fr (Christian Gillot), gl
(Jesus Bravo Alvarez)
* Fixed bug of not refocusing unshaded windows
* Fixed bug of not notifying windows of their actual position after
placing them
* Fixed bug when grabbing Hyper-modified buttons
* Fixed the focus-flickering when moving windows opaquely
* Fixed the `commandp' function when applied to autoload stubs
* Fixed typo in `gnome-logout' command (Jens Finke)
* Fixed `raise-window-and-pass-through-click' command to pass
<click2>, etc, events through to frame parts
* Fixed infinite-regress bug when reading GNOME menu entries
(`Type=directory', but actually a file)
* Fixed bug when showing window-move position with snapped movement
(adapted from merlin@merlin.org)
* Fixed bug when matching null text properties
0.19
====
* Added tooltips for window frames (disabled by default)
* Added `Grab...' button to match-windows dialogue, grabs the value
of an X property from a window
* Support for creating cursors from bitmaps, and for changing the
colors of cursors
* Internationalized all strings in the configurator
* New functions: `frame-part-get', `server-grabbed-p',
`forget-button-press', `resize-window-with-hints',
`window-in-workspace-p', `windows-share-workspace-p'
* New window properties: `never-focus', `raise-on-focus'
* New pseudo-property (for window matching): `size', in terms of the
window's size hints
* Message catalogue additions/updates: Galician (Jesus Bravo
Alvarez); Danish (Birger Langkjer)
* Don't ignore initial state property of windows
* Option to control height of drawn bevels (Chris Hanson)
* More logical method of drawing diagonal gradients (Chris Hanson)
* Fixed typo when looking for i18n theme README files (Jesus Bravo
Alvarez)
* Fixed `popup-apps-menu' command (GΘrard Milmeister)
* Fixed `define-frame-class' when creating keymaps
* Fixed conversion of old-style `(set ...)' custom types
* Fixed `raise-window-and-pass-through-click' command to
pass-through subsequent clicks
* Fixed problems when grabbing/ungrabbing customized keymaps
* Fixed screen corruption when doing wireframe moving and
`move-resize-raise-window' is set
* Hacked around window-order problem when sticky windows exist
0.18
====
* General subsystem for matching windows to properties as they're
created. Allows matching on one or more of the window's X
properties (e.g. name, class, etc...), and then setting any number
of window manager properties as a result. See the `Matched Windows'
customize group
* Removed all `auto-FOO-alist' and `BAR-windows-re' variables,
they're obsoleted by the general match-windows mechanism
* Respect window's size hints when maximizing (both to see if the
window is maximizable, and to truncate the maximized dimensions to
an integral number of rows and columns)
* Show actual colors in the configurator, not just their names
* Added a new directory to the theme search path:
`PREFIX/share/sawmill/themes'. Use this for system-wide themes
(don't use the version specific directory)
* Included a new theme `mono'
* Deprecated the `show-message' function, replaced by
`display-message' with a better calling interface; also displays
multi-line strings
* Deprecated the menu "expand variables when first in list"
behaviour. Instead expand variables when the list is dotted to
them, as is done for functions
* Support the `Hyper' modifier, prefix is `H-'
* In the configurator, look for i18n'd theme README files (Yukihiro
Nakai)
* Added option to disable the ability to grab a second edge while
resizing (`resize-add-edges')
* Included Danish message catalogue (Kenneth Christiansen)
* Renamed `fixed-position' property as `sticky-viewport', and
`focus-proxy-click' as `focus-click-through'
* When evaluating mouse events, look in the window that the pointer
was in when the button was pressed, not where the pointer
currently is
* Fixed bug where focus gets totally lost after closing a Motif
application that has grabbed the keyboard
* Fixed (again) the problems when handling remapped windows; also
should be more ICCCM-compliant
* Fixed typos in one-dimensional maximisation (GΘrard Milmeister)
* Fixed the logic deciding when it's necessary to switch workspaces
after merging an empty one
* Fixed interactive placement showing the window when edge-flipping
(but it still doesn't work properly, rubber band traces are left)
* Removed flicker when focusing already-focused windows
0.17
====
* First version to use lexically scoped librep. This enables themes
to run in a "safe" environment, but all existing themes will need
to be ported; other language changes include the use of a single
symbol namespace, and scheme-like function call semantics
* Support for internationalization of messages and run-time
documentation; an en_GB catalogue is the only translation
currently, so please send me .po files for your native languages!
New option `--disable-nls' to disable i18n
* New functions `call-after-property-changed' and
`gtkrc-call-after-changed' to allow themes to receive these events
(hooks are now off-limits to themes)
* New command `raise-window-and-pass-through-click'; bind it to a
mouse button in the `window-keymap' to get the "raise window on
click" behaviour that seems popular
* New commands to move windows incrementally: `slide-window-X' and
`slide-group-X' for X one of: `left', `right', `up', `down'
* New commands to control `ignored' property of windows (Julian
Missig)
* New commands to toggle GNOME skip-winlist and skip-tasklist
properties of windows
* Respect window gravity with program-specified window placement
(<merlin@merlin.org>)
* Fixed a memory leak in the `stacking-order' function
* Fixed the `bevel-image' function (Scott Sams)
* Never look in the focused window's keymap by default with mouse
events
* Hacked around the "need an X11 connection to compile" misfeature
* Fixed bug in `gnome-menu' code when GNOME binaries aren't in the
first $PATH item; also accept non-alphanumeric language codes
* Fixed interactive window placement (again)
* Rewrote obscure documentation for some custom options
* Fixed bug when grabbing events with `AnyModifier' and a specific
button
0.16
====
* Support window groups, both as defined by applications, and
defined by the user (either interactively through the window's
menu, or via the `auto-group-alist' and `persistent-group-ids'
variables).
For most commands working on single windows, there's also one
operating on the group that the current window is a member of.
(With the notable exception currently of moving windows.) There's
also options controlling whether (de)iconification operates on
windows or groups
* Improved GNOME menu support--merge duplicate sub-menus, scan PATH
for `gnome-share-directory', also look in `/etc/X11/applnk' for
menu entries
* Option to control whether edge-flipping flips viewports or
workspaces (`edge-flip-type')
* New hook `after-framing-hook': called whenever a window's frame is
changed or recalibrated
* New window placement mode: `first-fit-or-interactive'
* Variables specifying common cursor shapes: (`move-cursor-shape',
`resize-cursor-shape', `select-window-cursor-shape')
* Fix interactive placement
* Fix problem of window losing focus when `cycle-windows' only finds
a single window; also, abort immediately if there's no windows to
cycle through at all
* Fix how the `WM_NORMAL_HINTS' property is read after it's been
updated
* Fix `maximize-fill' functions to respect the
`maximize-ignore-when-filling' option
* Fix interactive move/resize aborting if keyboard is already grabbed
* Ungrab the keyboard as well as the pointer before popping menus
0.15
====
* Changed how themes are loaded from tar files--the tar file must
now contain a directory with the same name as the theme; it's this
directory that stores the data files
* Allow viewport edge-flipping to be enabled by the customization
system, also enable flipping while moving windows
* Unified the method of marking which windows should be avoided when
maximizing, and which windows should be avoided when using the
fitted placement methods. Set the `avoid' property instead of the
`maximize-avoid' property; new functions `window-avoided-p' and
`avoided-windows'; new regexp `avoided-windows-re'
* New command `delete-empty-workspaces'
* Default theme is now `microGUI'
* When resizing only one edge of a window, moving the pointer past
one of the perpendicular edges grabs that edge also
* Only the first three buttons focus a window in click-to-focus mode
* Changed behaviour of `window-id' and `window-frame-dimensions'
functions. Replaced `query-last-pointer' function by
`query-button-press-pointer'
* New hooks: `while-moving-hook', `while-resizing-hook'
* Notice when `WM_TRANSIENT_FOR' property changes
* More bug fixes to the maximization code, mainly for efficiency;
also make first-fit placement work from top-left again
* Fix bug when matching events with `Any' modifier as well as other
modifiers
* Fix bug in `window-outside-viewport-p' (Andreas Degert)
* Fix bug in `sawmill-client --' with long inputs
* Fix bug when matching windows with session data--`SM_CLIENT_ID' or
`WM_COMMAND' _has_ to match
* Fix bugs when passive grabbing non-button-press pointer events
0.14
====
* Rewrote window-maximization, many new options
* New option `resize-by-frame-class', when enabled (the default),
the resized window edges are chosen to match the class of the
clicked frame part (i.e. matching the cursor shape)
* Load GNOME support code automatically if it looks like GNOME is
being used
* Create unix-domain sockets in `/tmp'
* New hooks: `window-moved-hook', `window-resized-hook',
`after-initialization-hook', `shape-notify-hook'.
* Improved how menus are displayed; the window-ops menu is shown by
ButtonPress not ButtonRelease events
* Refocus most-recently-focused window when switching viewport
* Added `centered' placement style
* Added symbol-completion to readline-based client
* Fix bug of not noticing WM_NORMAL_HINTS property changes; follow
the window's maximum size hints
* Fix bug of not reframing windows when they change from unshaped to
shaped, or vice versa
0.13
====
* New option to only highlight frame parts when their window is
focused (`highlight-when-unfocused')
* Typing `ESC' while moving/resizing a window cancels the operation,
restoring the original geometry
* New session management hook `sm-after-restore-hook'
* New function `set-frame-part-value'--makes customizing the
`frame-part-classes' variables easier
* Support for loading themes from tar files; needs librep 0.7
* Fix bug when allocating colors (choosing an incorrect cached color)
* Fix image tiling in frame part backgrounds
* Handle shifted keysyms when passive grabbing
* Fix another race condition when active grabbing
* Fix `_WIN_CLIENT_LIST' property not being set properly (both
missing windows immediately after they're adopted, and of
intentionally skipping ignored windows)
* Fix some problems with viewports when exiting/restarting
* Fix broken stacking of windows after they're mapped
* Prevent smart window placement blowing up when large numbers of
windows are open/opened (throttle back to random placement when the
event queue is too large, as well as trying to prune the search
space)
0.12
====
* Remember most recently focused windows on each workspace, activate
that window after changing workspaces; also, try to preserve focus
when moving windows between workspaces
* Option to disable auto-raise while cycling through windows
(`cycle-disable-auto-raise'); option to restrict cycling to the
current viewport (`cycle-all-viewports')
* Option `lock-first-workspace' is now enabled by default, and
prevents both the first and last interesting workspaces being moved
inwards
* Added readline support to the client program, pass
`--with-readline' option to configure (from Christopher P Goller
<goller@eng.utah.edu>)
* Added shaped-transient frame to microGUI theme
* New frame part attribute `below-client'
* Release passive grabs when unadopting windows
* When no window has the focus, the `root-window-keymap' is searched
for key-press events
* Fix bug when binding to the unix-domain socket
* Fix focus sometimes being lost when the focused window is destroyed
* Fix bug when reading GNOME menu entries without `Type' fields
* Fix bug when removing title or border of `shaped-transient' window
types (make the window completely unframed)
* Fix bug when shading a transient window with `decorate-transients'
enabled
* Fix some bugs when placing windows that are almost as big or
bigger than the screen
* Fix some race-conditions between wm-generated and client-generated
map/unmap/reparent events
* Fix infamous "jerky pointer" bug, this will also make overlapping
shaped frame-parts display correctly
* Fix bug where `cycle-windows' could leave a window originally
under the pointer that's unfocused, drawn as though it is focused
0.11
====
* New option `lock-first-workspace', prevent the first workspace
from being deleted when it's empty
* New option `ignore-window-input-hint', to always give windows the
focus, whether they say they will accept it or not
* New options when cycling windows: `cycle-warp-pointer' and
`cycle-focus-windows'
* Restore the old method of setting the focus, should fix bug of
losing focus totally when switching to a new workspace
0.10
====
* Implemented virtual workspaces, bind to the `move-viewport-X' and
`move-window-X' commands (for X being `left', `right', `up', or
`down')
* Added a new theme: `microGUI' by Ryan Lovett
<ryan@ocf.berkeley.edu>, based on the QNX Photon screenshots
* Added a `Grab key' button in the bindings widget, replaces the
current binding with the next pressed key
* Lisp module to load the GNOME menus and use them to replace the
applications menu. Add `(require 'gnome-menu)' to your
`~/.sawmillrc' file to load it
* Network server is disabled by default (since it can provide a
security hole if X access control is disabled); re-enabled the old
unix domain socket code (see the FAQ for more details)
* Only give the input focus to windows that actually want it
* New option to keep transient windows above their parents
(`transients-above-parents')
* New option to control how the workspace boundary is handled when
moving windows between workspaces (`workspace-send-boundary-mode')
* New commands `send-to-workspace:X' for X from 1 to 9
* While windows are hidden or shaded, unmap the client (for ICCCM
compliance)
* Slightly different method of handling destroyed clients, hopefully
results in fewer annoying error messages
* Support X installations without X11R6 session management (by not
doing any session management)
* Don't ask the session manager to save our environment
* Fix bug where a window is destroyed/unmapped while it's being
resized or moved
* Fix bug where window can still be auto-raised even if it's been
defocused
* Fix problems when `--prefix' option has a trailing slash
* Now handles client windows being reparented by a third party (i.e.
swallowing apps)
0.9
===
* The first-fit and best-fit algorithms are now much more
intelligent, e.g. instead of falling back to random placement when
a window can't be placed without overlapping an existing window,
they will attempt to minimize this degree of overlapping
* The `foreground' property of each frame part may now be an image
instead of a piece of text
* New theme `smaker', uses the foreground images capability to do a
somewhat WindowMaker-like theme (with the absolute-e images). This
theme is extensively customizable--all images, colors, dimensions,
etc...
* Use Imlib's fuzzy color matching for all color allocation; this
should help on `PseudoColor' visuals
* Added an `xterm' command to launch an xterm
* Improved the bindings customization widget layout; added a `Copy'
button to insert a copy of the current binding
* Added `next-workspace-row' and `previous-workspace-row' commands.
Together with the `workspace-columns' variable these mimic a 2d
desktop
* Removed the `cycle-through-workspaces' option, there's now
`workspace-boundary-mode'--one of `stop', `wrap-around' or
`keep-going'
* Added option to include ignored windows when edge snapping
(`move-snap-ignored-windows')
* Fix race condition between startup of sawmill and gmc; sawmill now
has earlier priority
* Fix seg fault when running out of color cells while generating a
window frame
* Fix bug where the window-workspace mapping wasn't reloaded from
saved sessions
* Fix cancel/revert problems in bindings widget
* Fix problems binding to shifted keys when using the XKEYBOARD
extension and XFree86
* Be ICCCM compliant when a client requests to be moved
* Fix crash when tiling small images into large images
* Fix bug where windows could be snapped totally off-screen
* Fix bug when windows change their `override_redirect' attribute
while unmapped
* Fix bug associated with WordPerfect's menu window
0.8
===
* First attempt at best-fit window placement (doesn't really work
properly yet...)
* Added a customization option to focus windows when they're
un-iconified (`focus-windows-on-uniconify')
* Fix bug in click-to-focus mode where the click is only passed
through to the client window, not to any local bindings of the wm
* Don't leave windows unframed if there's an error in the user's
startup files
* Fix bug in `preallocated-workspaces' option
* Don't place windows off-screen in first-fit mode
0.7
===
* Added stack-based window cycling, bound to `M-TAB' by default.
Hold <Meta>, keep pressing <TAB> until the correct window is
reached, then let go of <Meta>.
* Added first-fit window placement (a.k.a smart-placement)
* Completed first stage of workspace rewrite--shouldn't go ballistic
when windows are removed anymore
* Added `override-frame-part-classes' variable--allows all frame
properties to be overridden on a per-class basis
* Click-to-focus now accepts any button and any modifiers
* Don't snap to gmc icons or panels
* Added an `auto-window-type-alist' variable mapping window names to
border types
* New variables `eval-modifier-events' and `eval-key-release-events'
to allow catching these types of keyboard events, disabled by
default
* Added functions for actively grabbing the keyboard
* Removed the long names of the keyboard modifiers, only the single
character modifiers are left
* If no alt modifier, set it to the same as meta; new variables
`alt-keysyms' and `meta-keysyms' describe the virtual modifier
assignments
* Fix bug when handling shaped frame parts--it was possible to go
into a long enter-, leave-notify loop when the old shape was
cleared
* Fix bug where opaque resizing with snap-to-edges on moved the
window as well as resizing it
* Fix bug when raising the only managed window
* Fix bug where very small client windows got weirdly shaped frames
0.6
===
* Define the standard "classes" of frame parts (i.e. things like
close button, title, left border, etc...) then allow the state of
members of these classes to be set in one place (the
`frame-part-classes' variable). This should ensure that different
themes have the same feel (but a feel that may be customized by the
user)
* Allow frame parts to be removed if possible (if they have the
`removable' property). Nothing makes use of this yet
* Added window-shading, double-click button1 on the title bar
* Created a sawmill capplet for the GNOME control center. Use the
`--enable-capplet' configure option to build it
* First attempt at a technical manual (very quickly written, so
probably some inaccuracies)
* In the `gtk' theme, draw bevels on window decorations
* Use spin-buttons in the configurator to enter numbers
* Add option `focus-proxy-click' controlling whether to pass the
focus-inducing button-press event to the underlying window (in
click-to-focus mode)
* Changed the bindings in window borders, it's now the more usual
button1 to resize, button2 to move
* When clicking and dragging windows, ensure that the clicked frame
part stays clicked until the button is released
* If in click-to-focus mode, and there's no parent window to focus
when the focused window is closed, focus the topmost window (not
the window under the pointer as in the other focus modes)
* Changing window frames is _much_ less ugly, no flicker at all!
* Try to optimise window restacking some more
* Sped up opaque window moving when the position display is enabled
* Preserve iconified state across restarts
* Optimise updating the shape of an unframed window (this stops gmc
icons flashing annoyingly)
* Fix bugs in click-to-focus mode where some windows were
un-focusable
* Fix bug where cycling through windows in click-to-focus mode
didn't focus the activated window
* Fix bug where comparing sawmill lisp objects caused a crash
* Fix bug where initiating a resize in the middle of the window
didn't allow any of the edges to be moved
* Fix bug where changing the "decorate transients" option didn't
alter any existing transient windows
* Fix bug where iconifying a sticky or ignored window gave no way of
reclaiming it--these windows now appear at the end of the window
menu
0.5
===
* Now does session management. The scheme is extensible, arbitrary
Lisp modules can save and restore window state due to their own
functionality (using the `sm-window-save-functions' and
`sm-restore-window-hook' hooks). See `lisp/workspace.jl' for an
example
* Displays window position or dimensions whilst interactively moving
or resizing a window (`move-show-position',
`resize-show-dimensions')
* Mechanism for setting frame styles on a per-window basis (this was
always possible, just not easy). The `auto-frame-style-alist'
variable associates window name regular expressions with frame
styles. Also, the `window-ops-menu' has a new submenu with all
possible styles
* New option `preallocated-workspaces', the number of workspaces to
create at startup
* Window-workspace mapping is preserved through restart (as long as
the GNOME hints are enabled)
* Theme directories may contain a short `README' file that will be
displayed in the configuration tool
* Changed the custom file to `~/.sawmill/custom' instead of
`~/.sawmill-custom'. The old file will be moved to the new
location if it exists
* Install `sawmill-menu' under `libexec' since it shouldn't be run
manually
* Option in `gradient' theme to create full-sized gradient images,
trading memory for quality
* Workaround the flicker when raising windows
* Changed most of the `menus' and `custom' customize options into
normal variables (they're not particularly intuitive)
0.4
===
* Frame parts can now be highlighted when the mouse is over them,
also they "un-click" and "re-click" as the pointer leaves and
re-enters their window. ButtonRelease bindings are only activated
when the mouse is in the window at the time
* Frame part backgrounds can now be rendered on-the-fly using the
new `renderer' property in frame definitions. This property is a
function called with args `(IMAGE STATE)'; it should draw a
background into IMAGE for the specified state (`nil', `focused',
`highlighted' or `clicked')
* New theme `gtk'. This reads the default GTK style and uses the
associated colors and pixmaps to decorate windows. It doesn't try
to handle engine-based themes. It should automatically detect when
the default style changes (if changed by the GNOME control
center). Do `sawmill-client -c gtk-reload-style' in the shell to
reload the style manually
* Functions for drawing color gradients and bevels into images. The
new `gradient' theme uses these and on-the-fly rendering to do
`afterstep'-like window titles
* Configurator changes: use a paned widget to separate the list of
groups from the settings (stops their relative sizes changing),
allow each group to be customized separately, either through a new
set of root-submenus or the commands `customize:GROUP' for each
GROUP.
* Changed the way that "themes" are organised, each theme now gets
its own directory, which must include a `theme.jl' or `theme.jlc'
script to initialise a frame-style of the same name as the
directory. While this script is being evaluated the image path is
set so that the theme can load any images stored in its directory.
Also created the variable `theme-load-path' containing the list of
directories searched when trying to load a theme. By default it
contains two directories: `~/.sawmill/themes/' and
`PREFIX/share/sawmill/VERSION/themes'.
* Resizing now chooses the direction to resize the window in by the
initial position of the pointer in relation to the window. The
window is divided into a 3x3 grid, the pointer must be in one of
the outer rectangles to resize in that direction
* New commands `select-workspace:X' for X between 1 and 9
* Support multiple depths, or layers, of windows
* It's now possible to move the current workspace up or down the
list of all workspaces
* New option `-c COMMAND' to `sawmill-client'; invokes the named
interactive function
* When an app asks for no title and no border, give it what it
wants--use the new `unframed' window type
* The maximize button works
* Option to control placement of transient windows
(`place-transient-mode')
* Changing the frame style preserves the original window stacking
order
* Added documentation strings for most built-in functions
* Fix bug of evaluating both KeyPress _and_ KeyRelease events
* Fix bug of making the shape mask of unshaped client windows too big
* Fix bug where already-handled BadWindow errors were being reported
* Fix bug where the `window-ops-menu' could be displayed from one
window but then affect a different window
* Fix bug where click-to-focus doesn't work for new windows
* Fix bug where deleting the last workspace selected the first, not
the new last workspace
* Fix bug where changing a colormap when no window is focused causes
a segfault
* Fix bug where iconifying a window may leave it in the clicked
state after it's uniconified
* Fix Caps_Lock and Num_Lock modifiers interfering with bindings
* Fix accessing X properties on 64-bit architectures
* Fix bug where pointer may be left grabbed after moving a window
0.3a
====
* Support the maximized GNOME window states
* Where available, show documentation strings of commands in the
configurator
* Improve the method of handling clicks in frame-parts
* Fix asynchronous client-server protocol
* Fix interactive window moving/resizing (don't leave traces of the
rubber-band, stop the window initially "jumping" to the pointer)
0.3
===
* Implemented window maximization
* Added support for snapping to window edges when interactively
moving windows (`move-snap-edges' and `move-snap-epsilon')
* First attempt at handling a subset of the Motif and OpenLook
window hints
* Removed the `sloppy-focus' variable, it's replaced by
`focus-mode'. This can currently be one of `enter-exit' (normal
focus follows pointer), `enter-only' ("sloppy" focus) or `click'
(click to focus)
* When resolving pointer events, scan the `keymap' property of the
window under the pointer, not the focused window (as with keypress
events)
* The `sawmill-client' program can now communicate inter-host, since
it uses X properties not raw sockets
* New hook `before-exit-hook', called immediately before shutting
down
* Rewrote the GNOME support as a Lisp module
* Placing windows interactively now works
* Fixed the bug on Solaris where deleting windows could cause a
segmentation fault
0.2
===
* Added a user-customization system, inspired by Emacs' customize
facility. Invoke this through the `sawmill-ui' program, or from
the `Customize...' entry in the main menu. All changes are stored
in the Lisp script `~/.sawmill-custom'
* Selected windows may now be raised (`raise-selected-windows')
* It's possible to prevent the mouse pointer being warped to
selected windows (`warp-to-selected-windows')
* The `brushed-metal' and `simple' themes now define all four
standard frame types
* Frame themes are now stored in a separate directory
(`PREFIX/share/sawmill/VERSION/lisp/themes') so that the list of
all available themes can be made automatically
* The frame colors of the `simple' frame style can now be customized
(`simple-normal-color' and `simple-active-color')
* The `sawmill-defaults.jl' script enables GNOME compliance
unconditionally (since it has no ill-effects even if GNOME isn't
being used)
* Transient windows can be given the same frames as normal windows
(`decorate-transients')
* Newly-displayed transient windows can be automatically given the
focus if their parent window is focused (`transients-get-focus')
* Any newly-displayed windows can be automatically given the input
focus (`focus-windows-when-mapped')
* The `foreground', `background' and `font' attributes of each frame
part may now refer to a function
* Fixed the window-move bug whereby the first motion event was
discarded
* Fixed the bug where windows may be placed partially off the root
window, even if they needn't be
* Fixed the shaped frame parts bug (they didn't work)
* Miscellaneous other bug-fixes
0.1
===
First proper release